package com.office.automate.service.def.employee;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.office.automate.exception.framework.FrontierVisibleException;
import com.office.automate.model.employee.Employee;
import com.office.automate.model.employee.EmployeeAttandanceCommit;
import com.office.automate.model.employee.EmployeeAttendance;
import com.office.automate.model.employee.EmployeeOverTime;
import com.office.automate.model.employee.EmployeeQualification;
import com.office.automate.model.employee.EmployeeSearch;

/**
 * 
 * @author Dasan.Weerarathne
 *
 */
public interface EmployeeService {

	public HashMap<String, FrontierVisibleException> validateEmployeeDetails(Employee aEmployee) throws FrontierVisibleException;

	public boolean validateUniquenessOfEmailAddress(String aEmailAddress);

	public boolean checkAvailabilityOfUsername(String aUsername);

	public Employee registerNewEmployee(Employee aEmployee) throws FrontierVisibleException;

	public HashMap<String, FrontierVisibleException> validateEmployeeQualificationDetails(EmployeeQualification anEmployeeQualification) throws FrontierVisibleException;

	public EmployeeQualification addEmployeeQualification(EmployeeQualification anEmployeeQualification) throws FrontierVisibleException;

	public void deleteQualification(EmployeeQualification employeeQualification) throws FrontierVisibleException;

	@SuppressWarnings("rawtypes")
	public List<List> getEmployeeQualificationPage(int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public int getAvailableEmployeeQualificationDetailRecordCount() throws FrontierVisibleException;

	@SuppressWarnings("rawtypes")
	public List<List> getSearchResultPage(EmployeeSearch anEmployeeSearch, int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public int getAvailableEmployeeDetailRecordCount(EmployeeSearch aSearchCriteria) throws FrontierVisibleException;

	public void deleteEmployee(Employee anEmployee) throws FrontierVisibleException;

	public Employee getEmployeeDetails(long anEmployeeId) throws FrontierVisibleException;

	public void updateEmployee(Employee anUpdateEmployee) throws FrontierVisibleException;

	public HashMap<String, FrontierVisibleException> validateUpdateEmployeeDetails(Employee aEmployee) throws FrontierVisibleException;

	public List<EmployeeQualification> getEmployeeQualificationDetails(long anEmployeeId) throws FrontierVisibleException;

	public void uploadProfileImage(Employee updateEmployee) throws FrontierVisibleException;

	public EmployeeAttendance getEmployeeAttendanceDetailsForCurrentWeek(long employeeId) throws FrontierVisibleException;

	public HashMap<String, FrontierVisibleException> validateOTRequestDetails(EmployeeOverTime employeeOverTime) throws FrontierVisibleException;

	public void addEmployeeOTRequest(EmployeeOverTime employeeOverTime) throws FrontierVisibleException;

	public void cancelOverTimeRequest(long aRequestId) throws FrontierVisibleException;

	public void approveOverTimeRequest(long aRequestId) throws FrontierVisibleException;

	public void rejectOverTimeRequest(long aRequestId) throws FrontierVisibleException;

	public int getAvailableEmployeeOverTimeRequestsRecordCount(Map<String, Object> aQueryCriterias) throws FrontierVisibleException;

	@SuppressWarnings("rawtypes")
	public List<List> getEmployeeOverTimeRequestPage(Map<String, Object> aQueryCriterias, int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public int getAvailableEmployeeOverTimeApprovalRequestRecordCount(long aCurrentLoginUserId) throws FrontierVisibleException;

	@SuppressWarnings("rawtypes")
	public List<List> getEmployeeOverTimeApprovalRequestPage(int aStartingIndex, int aNumberOfRecords, long aCurrentLoginUserId) throws FrontierVisibleException;

	public void commitAttandanceDetails(EmployeeAttandanceCommit employeeAttandanceCommit) throws FrontierVisibleException;

	public List<Employee> getAllEmployeeDetails() throws FrontierVisibleException;
}
